<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en-US">
<head>
<!-- GenHTML revision 25226-->
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Creating the Enterprise Bean - The Java EE 6 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2011-03-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/javaeetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td width="400px"><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnaph.html">4.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="giepx.html">5.&nbsp;&nbsp;Introduction to Facelets</a></p>
<p class="toc level2"><a href="gjddd.html">6.&nbsp;&nbsp;Expression Language</a></p>
<p class="toc level2"><a href="bnaqz.html">7.&nbsp;&nbsp;Using JavaServer Faces Technology in Web Pages</a></p>
<p class="toc level2"><a href="gjcut.html">8.&nbsp;&nbsp;Using Converters, Listeners, and Validators</a></p>
<p class="toc level2"><a href="bnatx.html">9.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkmaa.html">10.&nbsp;&nbsp;JavaServer Faces Technology Advanced Concepts</a></p>
<p class="toc level2"><a href="bnawo.html">11.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="gkiow.html">12.&nbsp;&nbsp;Using Ajax with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="gkhxa.html">13.&nbsp;&nbsp;Advanced Composite Components</a></p>
<p class="toc level2"><a href="bnavg.html">14.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnafd.html">15.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnaxu.html">16.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="gijti.html">17.&nbsp;&nbsp;Introduction to Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">18.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="giepu.html">19.&nbsp;&nbsp;Building RESTful Web Services with JAX-RS</a></p>
<p class="toc level2"><a href="gjjxe.html">20.&nbsp;&nbsp;Advanced JAX-RS Features</a></p>
<p class="toc level2"><a href="gkojl.html">21.&nbsp;&nbsp;Running the Advanced JAX-RS Example Application</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijsz.html">22.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="gijre.html">23.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<div id="scrolltoc" class="onpage">
<p class="toc level3"><a href="">Creating the Enterprise Bean</a></p>
<p class="toc level4"><a href="#gipsx">Coding the Enterprise Bean Class</a></p>
<p class="toc level4"><a href="#gipsi">Creating the <tt>converter</tt> Web Client</a></p>
<p class="toc level4"><a href="#gipvv">Building, Packaging, Deploying, and Running the <tt>converter</tt> Example</a></p>
<p class="toc level5"><a href="#gipum">To Build, Package, and Deploy the <tt>converter</tt> Example in NetBeans IDE</a></p>
<p class="toc level5"><a href="#gipvq">To Build, Package, and Deploy the <tt>converter</tt> Example Using Ant</a></p>
<p class="toc level5"><a href="#gjsjc">To Run the <tt>converter</tt> Example</a></p>
</div>
<p class="toc level3 tocsp"><a href="gipti.html">Modifying the Java EE Application</a></p>
<p class="toc level4"><a href="gipti.html#gipuk">To Modify a Class File</a></p>
<p class="toc level2 tocsp"><a href="gijrb.html">24.&nbsp;&nbsp;Running the Enterprise Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">25.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level2"><a href="gkcqz.html">26.&nbsp;&nbsp;Using the Embedded Enterprise Bean Container</a></p>
<p class="toc level2"><a href="gkidz.html">27.&nbsp;&nbsp;Using Asynchronous Method Invocation in Session Beans</a></p>
<p class="toc level1 tocsp"><a href="gjbnr.html">Part&nbsp;V&nbsp;Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="giwhb.html">28.&nbsp;&nbsp;Introduction to Contexts and Dependency Injection for the Java EE Platform</a></p>
<p class="toc level2"><a href="gjbls.html">29.&nbsp;&nbsp;Running the Basic Contexts and Dependency Injection Examples</a></p>
<p class="toc level2"><a href="gjehi.html">30.&nbsp;&nbsp;Contexts and Dependency Injection for the Java EE Platform: Advanced Topics</a></p>
<p class="toc level2"><a href="gkhre.html">31.&nbsp;&nbsp;Running the Advanced Contexts and Dependency Injection Examples</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;VI&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">32.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="gijst.html">33.&nbsp;&nbsp;Running the Persistence Examples</a></p>
<p class="toc level2"><a href="bnbtg.html">34.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level2"><a href="gjitv.html">35.&nbsp;&nbsp;Using the Criteria API to Create Queries</a></p>
<p class="toc level2"><a href="gkjiq.html">36.&nbsp;&nbsp;Creating and Using String-Based Criteria Queries</a></p>
<p class="toc level2"><a href="gkjjf.html">37.&nbsp;&nbsp;Controlling Concurrent Access to Entity Data with Locking</a></p>
<p class="toc level2"><a href="gkjia.html">38.&nbsp;&nbsp;Improving the Performance of Java Persistence API Applications By Setting a Second-Level Cache</a></p>
<p class="toc level1 tocsp"><a href="gijrp.html">Part&nbsp;VII&nbsp;Security</a></p>
<p class="toc level2"><a href="bnbwj.html">39.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bncas.html">40.&nbsp;&nbsp;Getting Started Securing Web Applications</a></p>
<p class="toc level2"><a href="bnbyk.html">41.&nbsp;&nbsp;Getting Started Securing Enterprise Applications</a></p>
<p class="toc level1 tocsp"><a href="gijue.html">Part&nbsp;VIII&nbsp;Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="gijto.html">42.&nbsp;&nbsp;Introduction to Java EE Supporting Technologies</a></p>
<p class="toc level2"><a href="bncih.html">43.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">44.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncdq.html">45.&nbsp;&nbsp;Java Message Service Concepts</a></p>
<p class="toc level2"><a href="bncgv.html">46.&nbsp;&nbsp;Java Message Service Examples</a></p>
<p class="toc level2"><a href="gkahp.html">47.&nbsp;&nbsp;Advanced Bean Validation Concepts and Examples</a></p>
<p class="toc level2"><a href="gkeed.html">48.&nbsp;&nbsp;Using Java EE Interceptors</a></p>
<p class="toc level1 tocsp"><a href="gkgjw.html">Part&nbsp;IX&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="gkaee.html">49.&nbsp;&nbsp;Duke's Tutoring Case Study Example</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td>
         <div class="header">
             <div class="banner">
                <table width="100%" border="0" cellpadding="5" cellspacing="0">
                   <tbody>
                      <tr>
                         <td valign="bottom"><p class="Banner">The Java EE 6 Tutorial
</p></td>
                         <td align="right"  valign="bottom"><img src="graphics/javalogo.png" alt="Java Coffee Cup logo"></td>
                      </tr>
                   </tbody>
                </table>
             </div>

             <div class="header-links">
	         <a href="./index.html">Home</a> | 
<a href="../information/download.html">Download</a> | 
<a href="./javaeetutorial6.pdf">PDF</a> | 
<a href="../information/faq.html">FAQ</a> | 
<a href="http://download.oracle.com/javaee/feedback.htm">Feedback</a>

             </div>
             <div class="navigation">
                 <a href="gijre.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
                 <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
                 <a href="gipti.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="gipss"></a><h2>Creating the Enterprise Bean</h2>
<p>The enterprise bean in our example is a stateless session bean called
<tt>ConverterBean</tt>. The source code for <tt>ConverterBean</tt> is in the <tt></tt><i>tut-install</i><tt>/examples/ejb/converter/src/java/</tt> directory.</p>

<p>Creating <tt>ConverterBean</tt> requires these steps:</p>


<ol><li><p>Coding the bean&rsquo;s implementation class (the source code is provided)</p>

</li>
<li><p>Compiling the source code</p>

</li></ol>


<a name="gipsx"></a><h3>Coding the Enterprise Bean Class</h3>
<a name="indexterm-1388"></a><a name="indexterm-1389"></a><p>The enterprise bean class for this example is called <tt>ConverterBean</tt>. This class
implements two business methods: <tt>dollarToYen</tt> and <tt>yenToEuro</tt>. Because the enterprise bean class doesn&rsquo;t
implement a business interface, the enterprise bean exposes a local, no-interface view. The
public methods in the enterprise bean class are available to clients that obtain
a reference to <tt>ConverterBean</tt>. The source code for the <tt>ConverterBean</tt> class is as
follows:</p>

<pre>package com.sun.tutorial.javaee.ejb;

import java.math.BigDecimal;
import javax.ejb.*;

@Stateless
public class ConverterBean {
    private BigDecimal yenRate = new BigDecimal("83.0602");
    private BigDecimal euroRate = new BigDecimal("0.0093016");

    public BigDecimal dollarToYen(BigDecimal dollars) {
        BigDecimal result = dollars.multiply(yenRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }

    public BigDecimal yenToEuro(BigDecimal yen) {
        BigDecimal result = yen.multiply(euroRate);
        return result.setScale(2, BigDecimal.ROUND_UP);
    }
}</pre><p>Note the <tt>@Stateless</tt> annotation decorating the enterprise bean class. This annotation lets the
container know that <tt>ConverterBean</tt> is a stateless session bean.</p>



<a name="gipsi"></a><h3>Creating the <tt>converter</tt> Web Client</h3>
<p><a name="indexterm-1390"></a><a name="indexterm-1391"></a><a name="indexterm-1392"></a><a name="indexterm-1393"></a>The web client is contained in the following servlet class:</p>

<pre><tt></tt><i>tut-install</i><tt>/examples/ejb/converter/src/java/converter/web/ConverterServlet.java</tt></pre><p>A Java servlet is a web component that responds to HTTP requests.</p>

<p><a name="indexterm-1394"></a><a name="indexterm-1395"></a>The <tt>ConverterServlet</tt> class uses dependency injection to obtain a reference to <tt>ConverterBean</tt>. The <tt>javax.ejb.EJB</tt>
annotation is added to the declaration of the private member variable <tt>converterBean</tt>, which is
of type <tt>ConverterBean</tt>. <tt>ConverterBean</tt> exposes a local, no-interface view, so the enterprise bean
implementation class is the variable type:</p>

<pre>@WebServlet
public class ConverterServlet extends HttpServlet {
  @EJB
  ConverterBean converterBean;
  ...
}</pre><p>When the user enters an amount to be converted to yen and
euro, the amount is retrieved from the request parameters; then the <tt>ConverterBean.dollarToYen</tt> and
the <tt>ConverterBean.yenToEuro</tt> methods are called:</p>

<pre>...
try {
  String amount = request.getParameter("amount");
  if (amount != null &amp;&amp; amount.length() > 0) {
    // convert the amount to a BigDecimal from the request parameter
    BigDecimal d = new BigDecimal(amount);
    // call the ConverterBean.dollarToYen() method to get the amount
    // in Yen
    BigDecimal yenAmount = converter.dollarToYen(d);

    // call the ConverterBean.yenToEuro() method to get the amount
    // in Euros
    BigDecimal euroAmount = converter.yenToEuro(yenAmount);
    ...
  }
  ...
}</pre><p>The results are displayed to the user.</p>



<a name="gipvv"></a><h3>Building, Packaging, Deploying, and Running the <tt>converter</tt> Example</h3>
<a name="indexterm-1396"></a><a name="indexterm-1397"></a><a name="indexterm-1398"></a><a name="indexterm-1399"></a><a name="indexterm-1400"></a><a name="indexterm-1401"></a><p>Now you are ready to compile the enterprise bean class (<tt>ConverterBean.java</tt>) and
the servlet class (<tt>ConverterServlet.java</tt>) and to package the compiled classes into a WAR
file.</p>



<a name="gipum"></a><h4>To Build, Package, and Deploy the <tt>converter</tt> Example in NetBeans IDE</h4>
<ol>
<li><b>From the File menu, choose Open Project.</b></li>
<li><b>In the Open Project dialog, navigate to:</b><pre><tt></tt><i>tut-install</i><tt>/examples/ejb/</tt></pre></li>
<li><b>Select the <tt>converter</tt> folder.</b></li>
<li><b>Select the Open as Main Project and Open Required Projects check boxes.</b></li>
<li><b>Click Open Project.</b></li>
<li><b>In the Projects tab, right-click the <tt>converter</tt> project and select Deploy. </b><p>A web browser window opens the URL <tt>http://localhost:8080/converter</tt>.</p></li></ol>

<a name="gipvq"></a><h4>To Build, Package, and Deploy the <tt>converter</tt> Example Using Ant</h4>
<ol>
<li><b>In a terminal window, go to:</b><pre><i>tut-install</i>/examples/ejb/converter/</pre></li>
<li><b>Type the following command:</b><pre><tt><b>ant all</b></tt></pre><p>This command calls the <tt>default</tt> task, which compiles the source files for the
enterprise bean and the servlet, placing the class files in the <tt>build</tt> subdirectory
(not the <tt>src</tt> directory) of the project. The default task packages the project
into a WAR module: <tt>converter.war</tt>. For more information about the Ant tool,
see <a href="bnaan.html">Building the Examples</a>.</p>
<hr><p><b>Note - </b><a name="indexterm-1402"></a>When compiling the code, the <tt>ant</tt> task includes the Java EE API JAR
files in the classpath. These JARs reside in the <tt>modules</tt> directory of
your GlassFish Server installation. If you plan to use other tools to compile
the source code for Java EE components, make sure that the classpath includes
the Java EE API JAR files.</p>


<hr>
</li></ol>

<a name="gjsjc"></a><h4>To Run the <tt>converter</tt> Example</h4>
<ol>
<li><b>Open a web browser to the following URL:</b><pre>http://localhost:8080/converter</pre><p>The Servlet ConverterServlet page opens.</p></li>
<li><b>Type <tt><b>100</b></tt> in the input field and click Submit.</b><p>A second page opens, showing the converted values.</p></li></ol>
         </div>
         <div class="navigation">
             <a href="gijre.html"><img src="graphics/leftButton.gif" border="0" alt="Previous" title="Previous"></a>
             <a href="p1.html"><img src="graphics/upButton.gif" border="0" alt="Contents" title="Contents"></a>
             <a href="gipti.html"><img src="graphics/rightButton.gif" border="0" alt="Next" title="Next"></a>
         </div>

         <div class="copyright">
      	    <p>Copyright &copy; 2011, Oracle and/or its affiliates. All rights reserved. <a href="docinfo.html">Legal Notices</a></p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

